package fantasma.estados;
import fabricas.FabricaEstados;
import fabricas.FabricaTiempo;
import fantasma.Fantasma;
import fantasma.tipos.FantasmaBuscadorTemperamental;
import fantasma.tipos.FantasmaPerezoso;
import interfaces.IEstado;
import interfaces.IManejadorDeTiempo;
import interfaces.IPacman;
import utilidades.Constantes;
import utilidades.Vector;

public class EstadoMuerto implements IEstado {
	private Fantasma fantasma;
	private IManejadorDeTiempo manejadorTiempo;
	
	public EstadoMuerto(Fantasma fantasma){
		this.fantasma = fantasma;
		this.manejadorTiempo = FabricaTiempo.crearManejadorDeTiempo(Constantes.TICKS_DE_MUERTO_A_CAZADOR);
		this.fantasma.desaparecerFantasmaMuerto();
	}
	
	public void transicionAMuerto(){}

	public void transicionAPresa(){}

	public void actualizarEstado(){
		manejadorTiempo.actualizarCantidadDeTicks();
		if(manejadorTiempo.llegoALaCantidadDeTicks())
			this.revivirFantasma();
	}
	
	private void revivirFantasma(){
		fantasma.cambiarEstado(FabricaEstados.crearEstadoCazador(fantasma));
		fantasma.volverACasillaInicial();
	}
	
	@Override
	public void interactuarCon(IPacman pacman) {
		if(Constantes.MODO_DEBUG)
			System.out.printf("esMuerto\n");

	}

	@Override
	public void moverComoBuscador(Fantasma fantasma, IPacman pacman) {}

	@Override
	public void moverComoBuscadorTemperamental(FantasmaBuscadorTemperamental fantasma, IPacman pacman) {}

	@Override
	public void moverComoPerezoso(FantasmaPerezoso estado, IPacman pacman) {}

	@Override
	public void moverComoZonzo(Fantasma estado, IPacman pacman) {}
	
	@Override
	public String obtenerEstadoEnTexto() {
		return "Muerto";
	}

	@Override
	public String obtenerDireccionEnTexto() {
		return "";
	}

	@Override
	public Vector obtenerDireccion() {
		return Constantes.NULO;
	}
	
	public boolean estaMuerto(){
		return true;
	}

	@Override
	public boolean esPresa() {
		return false;
	}

	@Override
	public Vector obtenerUltimaDireccion() {
		return Constantes.NULO;
	}
	@Override
	public int obtenerIra() {
		return 0;
	}
}